const Dish = require('../entity/Dish');
const fs = require('fs'); // 引入 Node.js 的文件系统模块

const {promisify} = require('util');
const {Op} = require("sequelize");
const unlinkPromise = promisify(fs.unlink);
const rootPath = 'E:\\VSCodeProject\\vue\\back'; // 根目录绝对路径
async function deleteDish(item) {
    try {
        // 删除数据库中对应ID的菜品
        const deletedRows = await Dish.destroy({
            where: {
                id: item.id
            }
        });

        if (deletedRows > 0) {
            console.log(`成功删除了 ${deletedRows} 条记录`);
            await deleteStaticPic(item)
            return deletedRows;
        } else {
            throw new Error('未找到匹配的记录');
        }
    } catch (error) {
        // 处理错误
        console.error("Error delete dish:", error);
        throw error;
    }
}
async function deleteStaticPic(item){
        const filename = item.pic.split('/').pop(); // 提取图片文件名
        const filePath = `${rootPath}\\uploads\\${filename}`; // 拼接本地文件路径
        console.log(filePath);
        try {
            await unlinkPromise(filePath);
            console.log('File deleted successfully');
        } catch (error) {
            console.error('Error deleting file:', error);
        }
}
async function batchDish(items) {
    try {
        const ids = items.map(item => item.id); // 提取所有菜品的 id
        // 删除数据库中对应多个ID的菜品
        const deletedRows = await Dish.destroy({
            where: {
                id: ids // 使用数组形式传递所有要删除的菜品的 id
            }
        });

        if (deletedRows > 0) {
            console.log(`成功删除了 ${deletedRows} 条记录`);
            // 删除本地的图片文件
            for (const item of items) {
                await deleteStaticPic(item)
            }
// 可选择返回一个删除成功的消息
            return {message: '批量删除成功'};
        } else {
            console.log('未找到匹配的记录');
            throw new Error('未找到匹配的记录');
        }
    } catch (error) {
        // 处理错误
        console.error("Error delete dish:", error);
        throw error;
    }
}

async function findPage(req) {
    try {
        const {pageNum, pageSize ,searchName} = req.query;
        const pageNumInt = parseInt(pageNum);
        const pageSizeInt = parseInt(pageSize);

        const offset = (pageNumInt - 1) * pageSizeInt; // 计算偏移量
        // 查询数据库获取总记录数
        let queryOptions = {
            offset,
            limit: pageSizeInt, // 使用 limit 控制返回的行数
            order: [['id', 'ASC']] // 按照 id 升序排列
        };

        if (searchName) {
            // 如果 searchName 不为空，则添加 where 条件
            queryOptions.where = {
                dishName: {
                    [Op.like]: `%${searchName}%`
                }
            };
        }

        // 查询数据库获取总记录数
        const totalCount = await Dish.count(queryOptions);
        const dishes = await Dish.findAll(queryOptions);
        return {
            totalCount, dishes
        };
    } catch (error) {
        // 处理错误
        console.error("Error saving dish:", error);
        throw error;
    }
}


async function saveDish(req) {
    try {
        const {id, dishName, imageUrl, price, status} = req.body;

        // 获取当前时间
        const currentTime = new Date();
        // 格式化时间，如果你需要的话
        const formattedTime = currentTime.toISOString().replace('T', ' ').replace(/\.\d{3}Z$/, '');

        // 检查数据库中是否存在具有指定 id 的记录
        const existingDish = await Dish.findOne({where: {id: id}});
        if (existingDish) {
            // 如果存在，则执行更新操作
            const updatedDish = await Dish.update({
                dishName: dishName,
                pic: imageUrl,
                price: price,
                status: status,
                time: formattedTime // 将格式化后的时间传递给 time 字段
            }, {
                where: {id: id}
            });
            return updatedDish;
        } else {
            // 如果不存在，则执行插入操作
            const newDish = await Dish.create({
                dishName: dishName,
                pic: imageUrl,
                price: price,
                status: status,
                time: formattedTime // 将格式化后的时间传递给 time 字段
            });
            return newDish;
        }
    } catch (error) {
        // 处理错误
        console.error("Error saving dish:", error);
        throw error;
    }
}

module.exports = {
    saveDish, findPage, deleteDish, batchDish
};